package cn.yanghx.pay.process;


import cn.yanghx.pay.constant.PayConstants;
import cn.yanghx.pay.vo.pay.close.CloseResult;
import cn.yanghx.pay.vo.pay.prepay.PrePayParams;
import cn.yanghx.pay.vo.pay.prepay.PrePayResult;
import cn.yanghx.pay.vo.pay.query.QueryResult;

/**
 * 支付具体实现需要实现的接口
 *
 * @author yanghx
 */
public interface PayProcessInterface {

    /**
     * 匹配。根据支付方式枚举来标识具体实现类的处理方式
     *
     * @param payMethodEnum 支付方式枚举
     * @return boolean
     */
    boolean match(PayConstants.PayMethodEnum payMethodEnum);

    /**
     * 预支付接口
     *
     * @param params 参数
     * @return 支付返回信息
     */
    PrePayResult prepay(PrePayParams params);


    /**
     * 查询。根据支付平台的订单id
     *
     * @param transactionId 平台的订单id
     * @return o
     */
    QueryResult queryForTransactionId(String transactionId);


    /**
     * 查询.根据商户的订单号
     * 也就是咱们的订单id
     *
     * @param outTradeNo 商户订单号
     * @return o
     */
    QueryResult queryForOutTradeNo(String outTradeNo);


    /**
     * 取消订单.根据商户的订单号
     *
     * @param outTradeNo 商户订单号
     * @return o
     */
    CloseResult close(String outTradeNo);

}
